
package com.jf.cloud.multishop.service;

import com.jf.cloud.api.multishop.bo.EsShopDetailBO;
import com.jf.cloud.api.multishop.bo.ShopSimpleBO;
import com.jf.cloud.api.multishop.vo.ShopDetailVO;
import com.jf.cloud.api.platform.dto.OfflineHandleEventDTO;
import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.multishop.dto.*;
import com.jf.cloud.multishop.model.ShopDetail;
import com.jf.cloud.multishop.vo.ShopDetailAppVO;
import com.jf.cloud.multishop.vo.ShopHeadInfoVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 店铺详情
 *
 * @author zz
 * @date 2020-12-05 15:50:25
 */
public interface ShopDetailService {

    /**
     * 分页获取店铺详情列表
     *
     * @param pageDTO 分页参数
     * @param shopDetailDTO 店铺搜索数据
     * @return 店铺详情列表分页数据
     */
    PageVO<ShopDetailVO> page(PageDTO pageDTO, ShopDetailDTO shopDetailDTO);

    /**
     * 根据店铺详情id获取店铺详情
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getByShopId(Long shopId);

    /**
     * 保存店铺详情
     * @param shopDetail 店铺详情
     */
    void save(ShopDetail shopDetail);

    /**
     * 更新店铺详情
     * @param shopDetailDTO 店铺详情
     */
    void update(ShopDetailDTO shopDetailDTO);

    /**
     * 根据店铺详情id删除店铺详情
     * @param shopId
     */
    void deleteById(Long shopId);

    /**
     * 获取店铺列表信息
     * @param shopIds
     * @return
     */
    List<ShopDetail> listByShopIds(List<Long> shopIds);
    /**
     * 根据店铺详情id获取店铺详情以及剩余短信额度
     *
     * @param shopId 店铺详情id
     * @return 店铺详情
     */
    ShopDetailVO getShopByShopId(Long shopId);

    /**
     * 申请开店
     *
     * @param shopDetailDTO 申请开店信息
     */
    void applyShop(ShopDetailDTO shopDetailDTO);

    /**
     * 店铺搜索分页
     *
     * @param pageDTO 分页参数
     * @param shopDetailDTO 店铺信息
     * @return 店铺信息列表
     */
    PageVO<ShopDetailAppVO> shopSearchPage(PageDTO pageDTO, ShopDetailDTO shopDetailDTO);

    List<ShopDetailAppVO> shopSearchNear(ShopDetailDTO shopDetailDTO);

    /**
     * 审核商家信息
     *
     * @param shopAuditingDTO 审核信息
     */
    void audit(ShopAuditingDTO shopAuditingDTO);

    /**
     * 改变店铺状态
     *
     * @param shopId
     * @param shopStatus
     */
    void changeSpuStatus(Long shopId, Integer shopStatus);

    /**
     * 删除店铺缓存
     *
     * @param shopId
     */
    void removeCacheByShopId(Long shopId);

    /**
     * 获取店铺信息及扩展信息
     *
     * @param shopId
     * @return
     */
    EsShopDetailBO shopExtensionData(Long shopId);

    /**
     * 创建店铺
     *
     * @param shopDetailDTO
     */
    void createShop(ShopDetailDTO shopDetailDTO);

    /**
     * 获取店铺信息及扩展信息
     * @param shopIds 店铺ids
     * @param shopName 店铺名称
     * @return 店铺信息列表
     */
    List<ShopDetailVO> getShopDetailByShopIdsShopName(List<Long> shopIds,String shopName);

    /**
     *    根据店铺id获取店铺扩展信息
     * @param shopId 店铺id
     * @return 店铺扩展信息
     */
    ShopDetailVO getShoExtensionsByShopId(Long shopId);

    /**
     * 根据手机号获取存在店铺的数量
     * @param mobile 手机号
     * @return 数量
     */
    Integer countByMobile(String mobile);

    /**
     * 平台 --下线活动商品
     * @param shopDetailVO 店铺信息
     * @param offlineReason 下线原因
     * @param sysUserId 系统用户id
     */
    void offline(ShopDetailVO shopDetailVO, String offlineReason, Long sysUserId);

    /**
     * 根据店铺状态查询店铺数量
     * @param shopStatus
     * @return
     */
    Long countByShopStatus(Integer shopStatus);

    /**
     * 平台创建店铺
     * @param shopCreateInfoDTO
     */
    void platformCreateShop(ShopCreateInfoDTO shopCreateInfoDTO);

    /**
     * 根据签约时间修改店铺状态
     * @param now
     */
    void changeShopStatusByContractTime(Date now);

    /**
     * 更新店铺签约信息
     * @param shopSigningInfoDTO
     */
    void updateSigningInfo(ShopSigningInfoDTO shopSigningInfoDTO);

    /**
     * 店铺重新申请上线
     * @param offlineHandleEventDTO
     */
    void auditApply(OfflineHandleEventDTO offlineHandleEventDTO);

    /**
     * 店铺违规下线，重新申请上线审核
     * @param offlineHandleEventDTO
     */
    void onlineAudit(OfflineHandleEventDTO offlineHandleEventDTO);


    /**
     * 根据参数获取店铺id
     * @param shopSimpleBO
     * @return
     */
    List<ShopSimpleBO> listSimple(ShopSimpleBO shopSimpleBO);

    /**
     * 检查店铺名称是否已存在
     * @param shopName
     * @return
     */
    Boolean checkShopName(String shopName);

    /**
     * 根据店铺状态查询店铺id列表
     * @param shopStatus
     * @return
     */
    List<Long> getShopIdByShopStatus(Integer shopStatus);

    /**
     * 店铺下线时满减，优惠券活动下架
     *
     * @param shopIds
     * @param shopStatus
     */
    void offlineShopActivity(List<Long> shopIds, Integer shopStatus);


    /**
     * 根据名字模糊查询店铺id
     * @param name
     * @return
     */
    List<Long> getShopIdsLikeName(String name);


    /**
     * 平台分页获取装修的店铺信息
     * @param pageDTO
     * @param shopSearchDTO
     * @param sysType com.jf.cloud.api.auth.constant.SysTypeEnum
     * @return
     */
    PageVO<ShopHeadInfoVO> renovationShopPage(PageDTO pageDTO, ShopSearchDTO shopSearchDTO, Integer sysType);

    /**
     * 店铺列表（营业、停业状态）
     * @param shopSearchDTO
     * @return
     */
    List<ShopHeadInfoVO> listRenovationShop(ShopSearchDTO shopSearchDTO);

    /**
     * 根据分类统计商家数量
     * @param cateId
     * @return
     */
    List<Map<String,Object>> group_area_count(Long cateId);

    /**
     * 根据地区统计商家数量
     * @param areaId
     * @return
     */
    List<String> getShopNameByArea(Long areaId,Integer level);
}
